from openpyxl import load_workbook
from openpyxl import Workbook


class Sheet:
    """ 这个类就是对openpyxl库进行简单的封装。"""
    def __init__(self, read_path):
        self.output_path = r'd:\2.xls'

        self.lwb = load_workbook(filename=read_path)
        self.write_sheet = Workbook()
        self.read_sheet = None
        self.put = None

    def set_read_sheet(self, name):
        """ 读取excel之前指定一个工作表名字。"""
        self.read_sheet = self.lwb[name]

    def read(self, xy):
        """
        这是读取工作表中的方法。
        xy是一个excel坐标参数，类似于 'a1' ,'b2',类型必须是字符型。
        """
        return self.read_sheet[xy].value

    def set_write_sheet(self, name):
        """ 设置写入工作表名字，用于想工作表写入内容。"""
        self.put = self.write_sheet.create_sheet(name)

    def write(self, xy, value):
        """
        这是写入工作表的方法。
        xy是工作表的坐标，
        value是需要写入的内容。
        """
        self.put[xy] = value

    def end(self):
        """ 如果是写入的话，最后需要调用这个方法，将内容保存到excel表中。"""
        self.write_sheet.save(filename=self.output_path)


def write():
    """
    对excel表格进行写入。
    """
    wb = Workbook()
    # 这是第一种方式，获取默认索引第0个位置的表单sheet写入。有三种方式写入数据，一整行数据使用append，字母加数字索引数组赋值数据，行和列分别用数字指定的方式。
    writer = wb.active
    writer.append([1, 2, 3])    # 一整行数据写入。
    writer['a1'] = 1    # 字母和数字赋值数据。
    writer.cell(1, 1, 'a')      # 行列分别用数字指定。

    # 这是第二种方式，指定表单名和索引位置。另外也同样支持三种方式写入数据。
    writer = wb.create_sheet('test', 0)
    writer.append([1, 2, 3])
    writer['a1'] = 2
    writer.cell(1, 2, 'b')

    wb.save('g:\\')     # 保存到文件。


def read_and_write():
    """
    可以从读取的工作表中修改数据，还可以在改xlsx文件中新建工作表。
    """
    wb = load_workbook('')
    sheet = wb.active       # 读取默认的工作表数据。
    sheet['a1'] = 1         # 指定位置写入。
    sheet.cell(1, 1, 1)     # 指定位置写入。

    sheet = wb.create_sheet('test', 1)  # 重新创建一个新的工作表。
    sheet['a1'] = 1


if __name__ == '__main__':
    write()
